<?php
	/**
	 *验证码函数
	 *@param int $length 验证码字符个数
	 *@param int $fontSize 验证码的字体大小
	 *@param bool $flag 是否采用中文验证码 默认为false，不采用
	 */
	function code($length,$fontSize,$flag = false)
	{
		session_start();
		//根据传递的字符个数，计算出画布的宽度
		$width = $fontSize * $length * 1.2;
		//根据字体的大小计算出画布的高度
		$height = $fontSize * 2;
		$img = imagecreatetruecolor($width, $height);
		$white = imagecolorallocate($img, 255, 255, 255);
		$str = '23456789abcdefghjkmnpqrstABCDEFGHJKMNPQRST';
		$strZh = '赵钱孙李周吴郑王冯陈楮卫蒋沈韩杨朱秦尤许何吕施张孔曹严华金魏陶姜戚谢邹喻柏水窦章云苏潘葛奚范彭郎鲁韦昌马苗凤花方俞任袁柳酆鲍史唐费廉岑薛雷贺倪汤滕殷罗毕郝邬安常乐于时傅皮卞齐康伍余元卜顾孟平';
		if ($flag) {
			//随机出来每个中文字符
			for ($i = 0; $i< $length; ++ $i) {
				//生成随机颜色
				$color = imagecolorallocate($img, mt_rand(200, 255), mt_rand(200, 255), mt_rand(200, 255));
				//截取出中文字符
				$code[$i] = mb_substr($strZh, mt_rand(0, mb_strlen($strZh, 'utf-8') - 1), 1 ,'utf-8');
				//将每个字符添加到画布上
				imagettftext($img, $fontSize, mt_rand(-20, 20), $i * $fontSize + 10, $height / 2 + 10, $color, './fonts/SIMYOU.TTF', $code[$i]);
			}
			//var_dump($code);
			//die();
			
		} else {
			for ($i = 0; $i < $length; ++ $i) {
				//随机出来的字符，保存一数组里面;
				$code[$i] = $str{mt_rand(0, strlen($str) - 1)};
				//生成随机颜色
				$color = imagecolorallocate($img, mt_rand(0, 255), mt_rand(0, 255), mt_rand(0, 255));
				//将随机出来的字符添加到画布上		
				imagettftext($img, $fontSize, mt_rand(-40, 40), $i * 25 + 10, $height / 2 + 10, $color, './fonts/consola.ttf', $code[$i]);
			}
		}
		
		//将数据转换为字符串
		$code = implode($code);
		//var_dump($code);
		//将字符串放在session
		$_SESSION['code'] = strtolower($code);
		//die();

		//添加干扰点
		for ($i = 0; $i < 100; ++ $i) {
			//生成随机的颜色
			$color = imagecolorallocate($img, mt_rand(0, 255), mt_rand(0, 255), mt_rand(0, 255));
			imagesetpixel($img, mt_rand(0, $width),  mt_rand(0, $height), $color);
		}

		//添加干扰线
		for ($i = 0; $i < 5; ++ $i) {
			//生成随机的颜色
			$color = imagecolorallocate($img, mt_rand(0, 255), mt_rand(0, 255), mt_rand(0, 255));
			imageline($img, mt_rand(0, $width),  mt_rand(0, $height), mt_rand(0, $width),  mt_rand(0, $height), $color);
		}
		header('Content-type:image/jpeg');
		imagejpeg($img);
	}
	code(5, 30 ,false);
?>